import dayjs from "dayjs"

type ElementPlusTagType = "primary" | "success" | "info" | "warning" | "danger"

/**
 * 获取 Element Plus 的标签类型
 * @param input  输入值
 * @returns  标签类型
 */
export function getTagType(input: unknown): ElementPlusTagType {
  const types: ElementPlusTagType[] = ["primary", "success", "info", "warning", "danger"]

  // 处理数值类型（包括数字字符串）
  if (typeof input === "number") {
    return types[Math.abs(input) % types.length]
  }

  // 处理可以转换为数字的字符串
  if (typeof input === "string" && !Number.isNaN(Number(input))) {
    return types[Math.abs(Number(input)) % types.length]
  }

  // 其他类型（字符串、对象等）计算哈希
  const inputString = String(input)
  let hash = 0

  for (let i = 0; i < inputString.length; i++) {
    hash = (hash << 5) - hash + inputString.charCodeAt(i)
    hash |= 0 // 转换为32位整数
  }

  return types[Math.abs(hash) % types.length]
}

export function getDateByOffset(offset: number) {
  return dayjs().add(offset, "day").format("YYYY-MM-DD")
}

/**
 * 截断内容并在末尾添加省略号
 * @param {string} str - 需要截断的内容
 * @param {number} maxLength - 最大显示长度
 * @returns {string} - 截断后的内容
 */
export function truncateStr(str: string, maxLength: number) {
  if (!str) return "" // 如果内容为空，直接返回空字符串
  return str.length > maxLength ? `${str.slice(0, maxLength)}...` : str
}
